package NowCoder.DynamicPlanning;
import java.util.*;

/**
 * 链接：https://www.nowcoder.com/questionTerminal/a811535fed784ea492b63622c28c75c5
 * 来源：牛客网
 *
 * 五子棋
 * 时间限制：C/C++ 1秒，其他语言2秒 空间限制：C/C++ 32M，其他语言64M
 * NowCoder最近爱上了五子棋，现在给你一个棋局，请你帮忙判断其中有没有五子连珠（超过五颗也算）。
 *
 * 输入描述:
 * 输入有多组数据，每组数据为一张20x20的棋盘。
 *
 * 其中黑子用“*”表示，白子用“+”表示，空白位置用“.”表示。
 *
 * 输出描述:
 * 如果棋盘上存在五子连珠（无论哪种颜色的棋子），输入“Yes”，否则输出“No”。
 * 示例1
 * 输入
 * ....................
 * ....................
 * ....................
 * ....................
 * ......*.............
 * .......*............
 * ........*...........
 * ....++++.*..........
 * ..........*.........
 * ....................
 * ....................
 * ....................
 * ....................
 * ....................
 * ....................
 * ....................
 * ....................
 * ....................
 * ....................
 * ....................
 * ....................
 * ....................
 * ....................
 * .......*............
 * ......+*+++.........
 * .......*............
 * .......*............
 * ....................
 * ....................
 * ....................
 * ....................
 * ....................
 * ....................
 * ....................
 * ....................
 * ....................
 * ....................
 * ....................
 * ....................
 * ....................
 * 输出
 * Yes
 * No
 */
public class 五子棋_编程_1_7_14 {
    //TODO:请重做这道题
    static int[][] direction = {{0, 1}, {0, - 1}, {1, 0}, {- 1, 0}, {1, 1}, {1, - 1}, {- 1, 1}, {- 1, - 1}};
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            Character[][] map = new Character[20][20];
            for (int i = 0; i < 20; i ++ ) {
                String s = sc.next();
                for (int j = 0; j < 20; j ++ ) {
                    map[i][j] = s.charAt(j);
                }
            }
            if(check(map)) System.out.println("Yes");
            else System.out.println("No");
        }
    }
    public static boolean check(Character[][] map) {
        for (int i = 0; i < 20; i ++ ) {
            for (int j = 0; j < 20; j ++ ) {
                if(map[i][j] == '*' || map[i][j] == '+') {
                    for (int k = 0; k < 8; k ++ ) {
                        int count = 1;
                        int x = i + direction[k][0];
                        int y = j + direction[k][1];
                        while (x >= 0 && x < 20 && y >= 0 && y < 20 && map[x][y] == map[i][j]) {
                            count ++ ;
                            x += direction[k][0];
                            y += direction[k][1];
                        }
                        if(count == 5) return true;
                    }
                }
            }
        }
        return false;
    }
}
